package com.iamteer.day12;

/**
主要回顾：Object 类的几个方法重写

1. toString 方法
    返回该对象的字符串表示
2. equals 方法
    用于比较两个对象的内存地址
3. hashCode
    返回对象的哈稀码

*/

class Human{
    int id;
    String name;
    
    //Human 类的构造方法
    public Human(int id, String name){
        this.id = id;
        this.name = name;
    }
    
    //重写 toString 方法，以输出要求的格式
    public String toString(){
        return "ID: " + this.id + " Name: " + this.name;
    }
    
    //重写 equals 方法，以便按要求判断是否相同
    public boolean equals(Object obj){
        Human h = (Human)obj;
        
        return this.id == h.id;
    }
    
    //重写了 equals 方法，一般重写 hashCode 方法，以便 统一判断标准
    public int hashCode(){
        return this.id;
    }
}

public class LearnObject {
    public static void main(String[] args) {
        Human h1 = new Human(110, "Chuck");
        System.out.println(h1.toString());    //按要求输入
        
        Human h2 = new Human(110, "Chuck Li");//新规则：编号相同就是相同
        System.out.println("h1 == h2 ? " + h1.equals(h2));
        
        //既然相同，hashCode 也应该相同
        System.out.println("h1 hashCode: " + h1.hashCode());
        System.out.println("h2 hashCode: " + h2.hashCode());
    }
}